#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
软件需求建模助手脚本
使用OpenAI SDK进行需求分析和建模
"""

import os
import sys
import argparse
from openai import OpenAI

def main():
    # 配置API
    api_key = ""
    base_url = "https://api.chatfire.cn/v1"
    
    # 检查API密钥
    if api_key == "your_openai_api_key_here":
        print("错误: 请先设置您的OpenAI API密钥")
        print("编辑脚本并将 'your_openai_api_key_here' 替换为您的实际API密钥")
        sys.exit(1)
    
    # 初始化OpenAI客户端
    client = OpenAI(
        api_key=api_key,
        base_url=base_url
    )
    
    # 构建提示词内容
    system_prompt = "你是一个资深的软件需求分析师，负责分析和建模软件需求。"
    
    user_prompt = """请以如下结构化格式为一个超市管理系统进行软件需求建模：
1. **系统概述**：简要描述超市管理系统的目的和主要功能。
2. **功能需求**：
    - **商品管理**：详细列举商品管理模块应包含的具体功能，如商品的添加、修改、删除、查询等功能及其细节描述。
    - **库存管理**：说明库存管理部分的功能，例如库存盘点、库存预警、库存出入库记录等功能的具体需求。
    - **销售管理**：阐述销售管理相关功能，像销售订单处理、收银操作、销售统计报表生成等功能的详细要求。
    - **会员管理**：描述会员管理模块应具备的功能，如会员注册、会员信息修改、会员积分管理、会员优惠策略应用等功能细节。
3. **非功能需求**：
    - **性能需求**：说明系统在响应时间、处理并发量等方面的要求。
    - **可用性需求**：提及系统的可用时间、容错能力等方面的需求。
    - **安全性需求**：描述数据安全、用户认证与授权等方面的需求。
4. **数据需求**：列出系统涉及的主要数据实体，如商品、库存、销售记录、会员等，并描述每个实体的关键属性。

该超市管理系统主要服务于中小型超市，帮助其高效管理日常运营事务，提高运营效率和服务质量。"""
    
    print("正在调用OpenAI API进行需求建模分析...")
    print(f"使用模型: gpt-4o")
    print(f"API端点: {base_url}")
    print()
    
    try:
        # 调用OpenAI API
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {
                    "role": "system",
                    "content": system_prompt
                },
                {
                    "role": "user",
                    "content": user_prompt
                }
            ],
            max_tokens=4000,
            temperature=0.7
        )
        
        # 提取回答内容
        if response.choices and len(response.choices) > 0:
            content = response.choices[0].message.content
            
            print("=== 需求建模分析结果 ===")
            print()
            print(content)
            
            # 保存结果到文件
            output_file = "supermarket_requirements_analysis.md"
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write("# 超市管理系统需求建模分析\n\n")
                f.write(f"**分析时间:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
                f.write(f"**使用模型:** gpt-4o\n")
                f.write(f"**API端点:** {base_url}\n\n")
                f.write("## 原始需求描述\n\n")
                f.write(user_prompt)
                f.write("\n\n## 分析结果\n\n")
                f.write(content)
            
            print(f"\n结果已保存到: {output_file}")
            
        else:
            print("错误: API返回的响应中没有有效内容")
            sys.exit(1)
            
    except Exception as e:
        print(f"错误: API调用失败 - {str(e)}")
        sys.exit(1)
    
    print("\n分析完成！")

def create_advanced_version():
    """
    创建支持命令行参数的高级版本
    """
    parser = argparse.ArgumentParser(description='软件需求建模助手')
    parser.add_argument('-t', '--type', 
                       choices=['usecase', 'class', 'sequence', 'activity', 'comprehensive'],
                       default='comprehensive',
                       help='指定建模类型')
    parser.add_argument('-o', '--output', 
                       help='输出文件路径')
    parser.add_argument('-m', '--model', 
                       default='gpt-4o',
                       help='指定OpenAI模型')
    parser.add_argument('--custom-prompt', 
                       help='自定义需求描述')
    
    args = parser.parse_args()
    
    # 根据建模类型构建不同的系统提示词
    modeling_prompts = {
        'usecase': "你是一个专业的软件需求分析师，专门进行用例建模。请基于用户提供的需求描述，生成详细的用例图分析，包括：1. 识别主要参与者(Actor) 2. 识别用例(Use Case) 3. 描述用例之间的关系 4. 提供用例的详细描述。请用中文回答，并使用Markdown格式。",
        'class': "你是一个专业的软件架构师，专门进行类图建模。请基于用户提供的需求描述，生成详细的类图分析，包括：1. 识别主要类 2. 定义类的属性和方法 3. 描述类之间的关系(继承、组合、聚合、依赖) 4. 提供类的职责描述。请用中文回答，并使用Markdown格式。",
        'sequence': "你是一个专业的软件设计师，专门进行时序图建模。请基于用户提供的需求描述，生成详细的时序图分析，包括：1. 识别参与的对象 2. 描述对象间的交互序列 3. 标明消息传递的顺序 4. 说明关键的生命线和激活。请用中文回答，并使用Markdown格式。",
        'activity': "你是一个专业的业务分析师，专门进行活动图建模。请基于用户提供的需求描述，生成详细的活动图分析，包括：1. 识别主要活动和任务 2. 描述活动的执行顺序 3. 标明决策点和分支 4. 说明并行活动和同步点。请用中文回答，并使用Markdown格式。",
        'comprehensive': "你是一个专业的软件需求分析师和系统架构师。请基于用户提供的需求描述，进行全面的需求建模分析，包括：1. 需求分析和理解 2. 功能性需求识别 3. 非功能性需求识别 4. 用例建模 5. 概念类图设计 6. 系统架构建议 7. 风险评估。请用中文回答，并使用Markdown格式，结构清晰。"
    }
    
    return args, modeling_prompts[args.type]

if __name__ == "__main__":
    main()